Apache Commons IO লাইব্রেরি Buffered Stream এর মাধ্যমে ফাইল রিড এবং রাইট করার কার্যকারিতা বৃদ্ধি করতে সাহায্য করে। যখন ফাইল সাইজ বড় হয়, তখন সিস্টেমে অনেক বেশি I/O অপারেশন এবং স্ট্রিম অপারেশন হতে থাকে, যা সিস্টেমের পারফরম্যান্স কমাতে পারে। Buffered Streams ফাইলের ছোট ছোট অংশের পরিবর্তে বড় ব্লক আকারে ডেটা প্রক্রিয়া করে, যার ফলে I/O অপারেশনগুলো অনেক দ্রুত হয়।
BufferedInputStream এবং BufferedOutputStream এই ধরনের স্ট্রিমের প্রধান উদাহরণ, যা Java I/O এর পারফরম্যান্স বৃদ্ধি করতে সহায়তা করে। Apache Commons IO লাইব্রেরি ব্যবহার করে আমরা সহজেই এসব স্ট্রিমের উপর কাজ করতে পারি।
BufferedInputStream ফাইল রিড করার সময় বাফারিং ব্যবহার করে, যার ফলে ডেটার ছোট ছোট অংশের পরিবর্তে একসাথে বড় অংশ রিড করা হয়, যা I/O অপারেশনের পারফরম্যান্স বৃদ্ধি করে।
import org.apache.commons.io.IOUtils;
import java.io.*;
public class BufferedInputStreamExample {
public static void main(String[] args) {
File inputFile = new File("example.txt");
FileInputStream fis = null;
BufferedInputStream bis = null;
try {
// Create FileInputStream and wrap it with BufferedInputStream
fis = new FileInputStream(inputFile);
bis = new BufferedInputStream(fis);
// Read content from file using BufferedInputStream
String content = IOUtils.toString(bis, "UTF-8");
System.out.println("File content: " + content);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (bis != null) bis.close();
if (fis != null) fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
এখানে:
BufferedInputStream স্ট্রিমে ডেটা রিড করার জন্য আরও দক্ষতার সাথে বড় ব্লক আকারে ডেটা নিয়ে আসবে, ফলে ফাইল রিডের সময় পারফরম্যান্স উন্নত হবে।
BufferedOutputStream ফাইল রাইট করার সময়, ডেটা ছোট ছোট অংশের পরিবর্তে বড় ব্লকে রাইট করে, যা write() মেথডের সংখ্যা কমিয়ে দেয় এবং I/O অপারেশন দ্রুত করে তোলে।
import org.apache.commons.io.IOUtils;
import java.io.*;
public class BufferedOutputStreamExample {
public static void main(String[] args) {
File outputFile = new File("output.txt");
FileOutputStream fos = null;
BufferedOutputStream bos = null;
try {
// Create FileOutputStream and wrap it with BufferedOutputStream
fos = new FileOutputStream(outputFile);
bos = new BufferedOutputStream(fos);
// Write content to the file using BufferedOutputStream
String content = "This is a sample text written using BufferedOutputStream.";
IOUtils.write(content, bos, "UTF-8");
System.out.println("Content successfully written to the file.");
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (bos != null) bos.close();
if (fos != null) fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
এখানে:
BufferedOutputStream স্ট্রিমে ডেটা লেখার জন্য আরও দক্ষভাবে বড় ব্লক আকারে ডেটা লেখবে, ফলে ফাইল লেখার সময় পারফরম্যান্স বৃদ্ধি পাবে।
Buffered Streams যখন ফাইল রিড এবং রাইট করতে ব্যবহৃত হয়, তখন তার বাফার সাইজ (buffer size) পরামিতি গুরুত্বপূর্ণ ভূমিকা পালন করে। সাধারণত BufferedInputStream এবং BufferedOutputStream স্ট্রিমে বাফারের সাইজ ৮ কিলোবাইট থাকে, কিন্তু আপনি এটি Custom buffer size দিয়ে কনফিগার করতে পারেন, যা আরও ভালো পারফরম্যান্স প্রদান করতে পারে।
import java.io.*;
public class CustomBufferSizeExample {
public static void main(String[] args) {
File inputFile = new File("example.txt");
File outputFile = new File("output.txt");
FileInputStream fis = null;
FileOutputStream fos = null;
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
// Create FileInputStream and wrap it with BufferedInputStream with custom buffer size (16 KB)
fis = new FileInputStream(inputFile);
bis = new BufferedInputStream(fis, 16 * 1024); // 16 KB buffer size
// Create FileOutputStream and wrap it with BufferedOutputStream with custom buffer size (16 KB)
fos = new FileOutputStream(outputFile);
bos = new BufferedOutputStream(fos, 16 * 1024); // 16 KB buffer size
// Read from the input file and write to the output file
byte[] buffer = new byte[16 * 1024]; // 16 KB buffer
int bytesRead;
while ((bytesRead = bis.read(buffer)) != -1) {
bos.write(buffer, 0, bytesRead);
}
System.out.println("File successfully copied with custom buffer size.");
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (bos != null) bos.close();
if (bis != null) bis.close();
if (fis != null) fis.close();
if (fos != null) fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
এখানে:
ফাইল কপি করার ক্ষেত্রে Buffered Streams সবচেয়ে কার্যকরী। এটি ডেটা বড় ব্লক আকারে কপি করে, ফলে কপি অপারেশন দ্রুত হয়।
import java.io.*;
public class BufferedFileCopyExample {
public static void main(String[] args) {
File sourceFile = new File("source.txt");
File destFile = new File("destination.txt");
try (
FileInputStream fis = new FileInputStream(sourceFile);
BufferedInputStream bis = new BufferedInputStream(fis);
FileOutputStream fos = new FileOutputStream(destFile);
BufferedOutputStream bos = new BufferedOutputStream(fos)
) {
// Copy data from source file to destination file using buffered streams
byte[] buffer = new byte[8192]; // 8 KB buffer
int bytesRead;
while ((bytesRead = bis.read(buffer)) != -1) {
bos.write(buffer, 0, bytesRead);
}
System.out.println("File copied successfully using Buffered Streams.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
এখানে:
Buffered Streams (যেমন BufferedInputStream এবং BufferedOutputStream) ফাইল রিড এবং রাইট করার কার্যকারিতা দ্রুততর করতে সাহায্য করে। Apache Commons IO লাইব্রেরি ব্যবহার করে, আপনি Buffered Streams ব্যবহার করে ফাইল কপি, রিড, এবং রাইট অপারেশনগুলো আরও কার্যকরী এবং দ্রুত করতে পারবেন। কাস্টম বাফার সাইজ ব্যবহার করলে পারফরম্যান্স আরও উন্নত হতে পারে। এই স্ট্রিমগুলির মাধ্যমে আপনি ছোট ছোট I/O অপারেশনকে বড় ব্লক আকারে রিড এবং রাইট করতে পারেন, যা সিস্টেমের I/O কাজকে আরও দ্রুত এবং কার্যকরী করে তোলে।
common.read_more